package com.example.chamberlainserver.Vo.Response.Dashboard;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 数据大屏仪表盘DTO
 */
@Data
public class DashboardDTO {
    
    /**
     * 系统概览数据
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class SystemOverview {
        /**
         * 用户总数
         */
        private Integer userCount;
        
        /**
         * 物资总数
         */
        private Integer materialCount;
        
        /**
         * 物资分类总数
         */
        private Integer categoryCount;
        
        /**
         * 跳闸记录总数
         */
        private Integer trippingRecordCount;
        
        /**
         * 库存不足物资数量
         */
        private Integer lowStockCount;
        
        /**
         * 待处理跳闸记录数量
         */
        private Integer pendingTrippingCount;
    }
    
    /**
     * 物资库存概况
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class MaterialOverview {
        /**
         * 正常库存物资数量
         */
        private Integer normal;
        
        /**
         * 库存不足物资数量
         */
        private Integer lowStock;
        
        /**
         * 待补充物资数量
         */
        private Integer needReplenish;
        
        /**
         * 已报废物资数量
         */
        private Integer scrapped;
    }
    
    /**
     * 用户活跃度数据
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class UserActivity {
        /**
         * 今日活跃用户数
         */
        private Integer dailyActive;
        
        /**
         * 本周活跃用户数
         */
        private Integer weeklyActive;
        
        /**
         * 本月活跃用户数
         */
        private Integer monthlyActive;
        
        /**
         * 用户角色分布
         */
        private List<RoleDistribution> userRoleDistribution;
        
        /**
         * 角色分布项
         */
        @Data
        @Builder
        @NoArgsConstructor
        @AllArgsConstructor
        public static class RoleDistribution {
            /**
             * 角色
             */
            private String role;
            
            /**
             * 数量
             */
            private Integer count;
        }
    }
    
    /**
     * 物资分类占比项
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class CategoryRatio {
        /**
         * 分类名称
         */
        private String categoryName;
        
        /**
         * 物资数量
         */
        private Integer count;
        
        /**
         * 百分比
         */
        private Integer percentage;
    }
    

    
    /**
     * 物资使用频率排行项
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class MaterialUsage {
        /**
         * 物资名称
         */
        private String materialName;
        
        /**
         * 使用次数
         */
        private Integer usageCount;
        
        /**
         * 分类名称
         */
        private String categoryName;
    }
    
    /**
     * 库存预警物资项
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class LowStockMaterial {
        /**
         * 物资ID
         */
        private Long id;
        
        /**
         * 物资名称
         */
        private String materialName;
        
        /**
         * 分类名称
         */
        private String categoryName;
        
        /**
         * 当前库存
         */
        private Integer quantity;
        
        /**
         * 最低库存
         */
        private Integer minQuantity;
        
        /**
         * 单位
         */
        private String unit;
        
        /**
         * 缺少数量
         */
        private Integer shortage;
    }
    
    /**
     * 跳闸记录统计数据
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class TrippingStats {
        /**
         * 总记录数
         */
        private Integer totalCount;
        
        /**
         * 已处理记录数
         */
        private Integer handledCount;
        
        /**
         * 待处理记录数
         */
        private Integer pendingCount;
        
        /**
         * 平均功率
         */
        private BigDecimal averagePower;
        
        /**
         * 最大功率
         */
        private BigDecimal maxPower;
        
        /**
         * 时间段分布
         */
        private Map<String, Integer> timeDistribution;
    }
    
    /**
     * 跳闸功率分布项
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class PowerDistribution {
        /**
         * 功率范围
         */
        private String range;
        
        /**
         * 记录数量
         */
        private Integer count;
    }
    
    /**
     * 跳闸时间分布数据
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class TimeDistribution {
        /**
         * 分布类型
         */
        private String type;
        
        /**
         * 分布数据
         */
        private List<DistributionItem> distribution;
        
        /**
         * 分布项
         */
        @Data
        @Builder
        @NoArgsConstructor
        @AllArgsConstructor
        public static class DistributionItem {
            /**
             * 时间点
             */
            private String timePoint;
            
            /**
             * 记录数量
             */
            private Integer count;
        }
    }
    
    /**
     * 班级跳闸排行项
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class ClassRanking {
        /**
         * 班级名称
         */
        private String className;
        
        /**
         * 跳闸次数
         */
        private Integer count;
        
        /**
         * 辅导员
         */
        private String counselor;
    }
    
    /**
     * 用户登录统计数据
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class LoginStats {
        /**
         * 总登录次数
         */
        private Integer totalLogins;
        
        /**
         * 独立用户数
         */
        private Integer uniqueUsers;
        
        /**
         * 人均登录次数
         */
        private Double averageLoginsPerUser;
        
        /**
         * 时间分布
         */
        private List<TimeCount> timeDistribution;
        
        /**
         * 时间计数项
         */
        @Data
        @Builder
        @NoArgsConstructor
        @AllArgsConstructor
        public static class TimeCount {
            /**
             * 日期
             */
            private String date;
            
            /**
             * 登录次数
             */
            private Integer count;
        }
    }
    
    /**
     * 用户操作分布项
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class OperationDistribution {
        /**
         * 操作类型
         */
        private String operation;
        
        /**
         * 操作次数
         */
        private Integer count;
        
        /**
         * 百分比
         */
        private Integer percentage;
    }
    
    /**
     * 物资库存趋势数据
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class MaterialStockTrend {
        /**
         * 趋势数据列表
         */
        private List<StockTrendItem> trendData;
        
        /**
         * 统计周期类型（daily, weekly, monthly）
         */
        private String period;
        
        /**
         * 总库存变化量
         */
        private Integer totalChange;
        
        /**
         * 入库总量
         */
        private Integer totalInbound;
        
        /**
         * 出库总量
         */
        private Integer totalOutbound;
    }
    
    /**
     * 库存趋势项
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class StockTrendItem {
        /**
         * 时间点（日期或时间段）
         */
        private String timePoint;
        
        /**
         * 总库存量
         */
        private Integer totalStock;
        
        /**
         * 入库数量
         */
        private Integer inboundQuantity;
        
        /**
         * 出库数量
         */
        private Integer outboundQuantity;
        
        /**
         * 净变化量（正数为增加，负数为减少）
         */
        private Integer netChange;
    }
    
    /**
     * 物资库存趋势详情
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class MaterialStockTrendDetail {
        /**
         * 物资ID
         */
        private Long materialId;
        
        /**
         * 物资名称
         */
        private String materialName;
        
        /**
         * 分类名称
         */
        private String categoryName;
        
        /**
         * 趋势数据
         */
        private List<StockTrendItem> trendData;
        
        /**
         * 当前库存
         */
        private Integer currentStock;
        
        /**
         * 最低库存
         */
        private Integer minStock;
        
        /**
         * 库存状态
         */
        private String status;
    }
}